"""
1260. 二维网格迁移
尝试过
简单
相关标签
相关企业
提示
给你一个 m 行 n 列的二维网格 grid 和一个整数 k。你需要将 grid 迁移 k 次。

每次「迁移」操作将会引发下述活动：

位于 grid[i][j]（j < n - 1）的元素将会移动到 grid[i][j + 1]。
位于 grid[i][n - 1] 的元素将会移动到 grid[i + 1][0]。
位于 grid[m - 1][n - 1] 的元素将会移动到 grid[0][0]。
请你返回 k 次迁移操作后最终得到的 二维网格。



示例 1：



输入：grid = [[1,2,3],[4,5,6],[7,8,9]], k = 1
输出：[[9,1,2],[3,4,5],[6,7,8]]
示例 2：



输入：grid = [[3,8,1,9],[19,7,2,5],[4,6,11,10],[12,0,21,13]], k = 4
输出：[[12,0,21,13],[3,8,1,9],[19,7,2,5],[4,6,11,10]]
示例 3：

输入：grid = [[1,2,3],[4,5,6],[7,8,9]], k = 9
输出：[[1,2,3],[4,5,6],[7,8,9]]


提示：

m == grid.length
n == grid[i].length
1 <= m <= 50
1 <= n <= 50
-1000 <= grid[i][j] <= 1000
0 <= k <= 100
"""
from collections import deque
from typing import List


class Solution:
    def shiftGrid(self, grid: List[List[int]], k: int) -> List[List[int]]:
        # 将二维数组转换为一维数组
        arr = [grid[i][j] for i in range(len(grid)) for j in range(len(grid[i]))]

        # 计算实际的移动步数
        k %= len(arr)

        # 使用 deque 进行旋转
        d = deque(arr)
        d.rotate(k)

        # 将 deque 转换回一维数组
        newarr = list(d)

        # 初始化新的二维数组
        newgrid = [[0] * len(grid[0]) for _ in range(len(grid))]

        # 将一维数组转换回二维数组
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                newgrid[i][j] = newarr[i * len(grid[0]) + j]

        return newgrid


if __name__ == '__main__':
    grid = [[1], [2], [3], [4], [7], [6], [5]]
    print(Solution().shiftGrid(grid, 23))  # 输出: [[5], [1], [2], [3], [4], [7], [6]]